#ifndef MPLOCALEUTILS_H
#define MPLOCALEUTILS_H

/******************************
 *
 * 名   称：   字符集编码转换的公共函数
 * 用   途：
 * 作用范围：   公共的
 * 创建时间：   2022-10-03
 * 参   考：
 * https://zhuanlan.zhihu.com/p/51828216                                    [Unicode 和 UTF-8 的关系与区别]
 * https://www.cnblogs.com/tsingke/p/10853936.html
 * https://blog.csdn.net/u012234115/article/details/83186386                [C++实现utf8和gbk编码字符串互相转换]
 * https://github.com/fhy1013/code_convert/blob/master/code_convert.cpp
 * https://blog.csdn.net/10km/article/details/111058219                     [C++11:string和wstring之间互转换]
 * https://github.com/qq1134993111/conversion_gbk_utf8                      [conversion_gbk_utf8]
 * https://blog.csdn.net/q_l_s/article/details/54020376                     [boost做string到wstring转换，以及字符集转换]
 * https://blog.csdn.net/liangzhao_jay/article/details/78788766
 * https://blog.csdn.net/qq_37309849/article/details/87690372               [C++11指定字符串常量编码格式]
 * http://www.zedwood.com/article/cpp-is-valid-utf8-string-function         [C++ UTF-8 string check validity function]
 ******************************/

#include "mpConfig.h"
#include <string>
#include "string.h"

namespace MP{
namespace LocaleUtils{

#ifdef PLATFORM_WINDOWS


std::string u8string_to_sys_encoding(const std::string& str);           //将UFT8编码的字符串 转换成 系统默认编码的字符串（例如中文windows系统中将转换成GBK编码）
std::string u8string_to_sys_encoding(char const *text);

std::string sys_encoding_to_u8string(const std::string& str);           //将系统默认编码的字符串 转换成 UFT8编码的字符串
std::string sys_encoding_to_u8string(char const *text);

std::wstring sys_encoding_to_unicode(const std::string& str);
std::wstring sys_encoding_to_unicode(char const *text);

std::string unicode_to_sys_encoding(const std::wstring& wstr);
std::string unicode_to_sys_encoding(wchar_t const *text);

#endif //PLATFORM_WINDOWS

std::string unicode_to_u8string(const std::wstring& wstr);              //utf8宽字符(Unicode) 转 utf8窄字符串
std::string unicode_to_u8string(wchar_t const *text);
std::wstring u8string_to_unicode(const std::string& str);               //utf8窄字符串 转 utf8宽字符(Unicode)
std::wstring u8string_to_unicode(char const *text);

bool check_is_utf8(const std::string& str);                             //检查字符串是否采用的UTF8编码

}   //END LocaleUtils
}   //END MP



#ifdef PLATFORM_WINDOWS
#define SYS_TEXT(quote) MP::LocaleUtils::u8string_to_sys_encoding(quote)
#else
#define SYS_TEXT(quote) quote
#endif //PLATFORM_WINDOWS

#endif // MPLOCALEUTILS_H
